首页/ 学科题库/ vite/ Web Worker 与多线程优化
vite 实战教程

Web Worker 与多线程优化

2026-05-23 约 7 分钟 juanwangdev

Web Worker 与多线程优化

Web Worker 在独立线程执行计算密集任务,不阻塞 UI 渲染。

Vite Worker 支持

JavaScript
// 使用 ?worker 后缀导入
import Worker from './heavy-calc.js?worker'

// 创建 Worker 实例
const worker = new Worker()

// 发送消息
worker.postMessage({ data: input })

// 接收结果
worker.onmessage = (e) => {
  console.log('Result:', e.data)
}

Worker 内联创建

JavaScript
// 内联 Worker 代码
import InlineWorker from './worker?worker&inline'

// inline Worker 不生成独立文件
// 代码内联到主 chunk

Worker 文件示例

JavaScript
// heavy-calc.js
self.onmessage = (e) => {
  const { data } = e

  // 执行复杂计算
  const result = heavyCalculation(data)

  // 返回结果
  self.postMessage(result)
}

function heavyCalculation(data) {
  // 大量计算...
  return result
}

注意:Worker 代码不能访问 DOM,只能通过消息通信。

Worker 类型

类型说明适用场景
?worker独立文件 Worker大型计算任务
?worker&inline内联 Worker小型任务
?sharedworkerSharedWorker多标签页共享

SharedWorker

JavaScript
// SharedWorker 多标签页共享
import SharedWorker from './shared.js?sharedworker'

const worker = new SharedWorker()
worker.port.onmessage = (e) => {
  console.log('Shared:', e.data)
}

使用场景

场景Worker效果
大数据处理✓不阻塞 UI
复杂计算✓多线程并行
图片处理✓后台处理
音视频编码✓实时处理

性能对比

方式UI 阻塞处理时间
主线程计算✓ 阻塞同步
Worker 计算✗ 不阻塞异步

Worker 销毁

JavaScript
// 任务完成后销毁
worker.onmessage = (e) => {
  console.log(e.data)
  worker.terminate()  # 销毁 Worker
}

要点总结

  • ?worker 导入创建 Worker
  • Worker 在独立线程执行计算
  • 不能访问 DOM,通过消息通信
  • sharedworker 多标签页共享
想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 动态导入与懒加载策略 下一篇 → 构建缓存与增量构建